package com.zsc.wxm.ysh.anjo.house.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.zsc.wxm.ysh.anjo.house.model.Resources;
import com.zsc.wxm.ysh.anjo.result.PageResult;
import com.zsc.wxm.ysh.anjo.result.Result;
import com.zsc.wxm.ysh.anjo.service.base.model.resources.dto.EstateDTO;
import com.zsc.wxm.ysh.anjo.service.base.model.resources.dto.MyRentHouseDTO;
import com.zsc.wxm.ysh.anjo.service.base.model.es.vo.EsDataVO;
import com.zsc.wxm.ysh.anjo.service.base.model.resources.dto.ResourcesDTO;
import com.zsc.wxm.ysh.anjo.service.base.model.resources.qo.ResourcesQuery;
import com.zsc.wxm.ysh.anjo.service.base.model.resources.vo.HouseInfoVO;
import com.zsc.wxm.ysh.anjo.service.base.model.staticdata.vo.HouseInfoStaticVO;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.List;

/**
 * <p>
 *  服务类
 * </p>
 *
 * @author playmaker
 * @since 2021-01-04
 */
public interface ResourcesService extends IService<Resources> {

    /**
     * 批量导入数据
     *
     * @throws IOException
     */
    void batchAddHouseData() throws IOException;


    /**
     * 新增房源
     *
     * @param params
     * @return
     */
    Resources addResources(ResourcesDTO params, MultipartFile[] files);

    /**
     * 分页查询
     *
     * @param params
     * @return
     */
    PageResult listPage(ResourcesQuery params);

    /**
     * 删除房源数据
     *
     * @param id
     */
    Result deleteById(Long id);


    /**
     * 获取详情
     *
     * @param id
     * @return
     */
    HouseInfoVO getInfoById(Long id);

    /**
     * 更改房源状态
     * @param id
     * @param status
     */
    void updateStatus(Long id, int status);

    /**
     * 更新房源数据
     * @param params
     * @param files
     */
    void updateItem(ResourcesDTO params, MultipartFile[] files);

    /**
     * 获取指定房东的房源信息
     * @param userId
     * @return
     */
    List<HouseInfoStaticVO> getUserHouseByNameAndPhone(Long userId);

    /**
     * 获取我出租的房子
     *
     * @param param
     * @return
     */
    PageResult getMyRentHouse(MyRentHouseDTO param);

    /**
     * 房源委托
     *
     * @param estateDto
     * @param resourcesDto
     * @param files
     */
    void entrustHouse(EstateDTO estateDto, ResourcesDTO resourcesDto, MultipartFile[] files);

    /**
     * 根据id获取ES数据VO对象
     *
     * @param id 主键
     * @return EsDataVO
     */
    EsDataVO getEsDataVoById(Long id);

}
